容器開創了虛擬化的新時代。當容器數量不多時,其實只要寫幾個腳本,就能達到管理的效果;但如果是一間大企業,內部有數百甚至數千個容器,就會發現,單靠腳本管理容器的方式逐漸變得難以維護,也更容易出錯。
為了解決大規模容器管理的挑戰,Google 在 2014 年開源了容器管理平台 Kubernetes(簡稱 K8S),大幅降低了管理大量容器的難度。不過,使用 K8S 時也有許多安全問題需要留意;若設定不當,攻擊者便可能入侵叢集,甚至進一步控制底層主機。今天,就讓我們一起探討容器化環境中的重要角色—K8S。
先來看看官方提供的 K8S 架構圖:
Cluster Architecture
簡單介紹一下各個元件的職責:
看過 K8S 的架構後,接著,簡單看看 Day 20~Day 25 將介紹的主題。
| 元件/機制 | 攻擊者關注的重點 | 對應篇章 |
|---|---|---|
| API server | 操作叢集資源的入口 | Day 21 |
| etcd | 叢集設定與機密資料的寶庫 | Day 23 |
| ServiceAccount token | 冒用服務帳號身分的通行證 | Day 20 |
| RBAC | 尋找過大權限與提權機會 | Day 22 |
| kubelet / Node | 控制工作負載、危及宿主的切入點 | Day 24 |
| Namespace 邊界 | 尋找跨命名空間存取的機會 | Day 22/25 |
接下來幾篇文章使用的靶機環境如下:
| 主機 | 身分 |
|---|---|
| 172.16.12.182 | Control Plane Node |
| 172.16.12.183 | Worker Node |
受限於篇幅,這個系列會先聚焦在幾個常見的 K8S 攻擊面,其他主題將在鐵人賽結束後另文補充。
感謝大家今天的收看,我們明天見!